package com.sys.SysAquaticSpecies.domain;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.sys.common.annotation.Excel;
import com.sys.common.core.domain.BaseEntity;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotNull;

/**
 * 养殖生物信息对象 sys_aquatic_species
 * 
 * @author sys
 * @date 2025-09-04
 */
@Data
public class SysAquaticSpecies extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** $column.columnComment */
    private Long id;

    /** 批量逻辑删除id */
    private List<Long> ids;

    /** 物种名称（如：膨腹海马、南美白对虾） */
    @Excel(name = "物种名称", readConverterExp = "如=：膨腹海马、南美白对虾")
    private String speciesName;

    /** 生物种类（如：鱼类、甲壳类、海龙科） */
    @Excel(name = "生物种类", readConverterExp = "如=：鱼类、甲壳类、海龙科")
    private String biologicalType;

    /** 学名 */
    @Excel(name = "学名")
    private String scientificName;

    /** 最低适宜水温（°C） */
    @Excel(name = "最低适宜水温", readConverterExp = "°=C")
    @NotNull(message = "最低适宜水温不能为空")
    @DecimalMin(value = "-10.0", message = "最低水温不能低于-10°C")
    @DecimalMax(value = "50.0", message = "最低水温不能高于50°C")
    private BigDecimal minTemp;

    /** 最高适宜水温（°C） */
    @Excel(name = "最高适宜水温", readConverterExp = "°=C")
    @DecimalMin(value = "-10.0", message = "最高水温不能低于-10°C")
    @DecimalMax(value = "50.0", message = "最高水温不能高于50°C")
    private BigDecimal maxTemp;

    /** 最低盐度（‰） */
    @Excel(name = "最低盐度(‰)")
    private BigDecimal minSalinity;

    /** 最高盐度（‰） */
    @Excel(name = "最高盐度(‰)")
    private BigDecimal maxSalinity;

    /** 最低PH */
    @Excel(name = "最低PH")
    private BigDecimal minPh;

    /** 最高PH */
    @Excel(name = "最高PH")
    private BigDecimal maxPh;

    /** 最低溶氧（mg/L） */
    @Excel(name = "最低溶氧", readConverterExp = "m=g/L")
    private BigDecimal minOxygen;

    /** 最高溶氧（mg/L） */
    @Excel(name = "最高溶氧", readConverterExp = "m=g/L")
    private BigDecimal maxOxygen;

    /** 最低氨氮（mg/L） */
    @Excel(name = "最低氨氮", readConverterExp = "m=g/L")
    private BigDecimal minAmmonia;

    /** 最高氨氮（mg/L） */
    @Excel(name = "最高氨氮", readConverterExp = "m=g/L")
    private BigDecimal maxAmmonia;

    /** 最低亚硝酸盐（mg/L） */
    @Excel(name = "最低亚硝酸盐", readConverterExp = "m=g/L")
    private BigDecimal minNitrite;

    /** 最高亚硝酸盐（mg/L） */
    @Excel(name = "最高亚硝酸盐", readConverterExp = "m=g/L")
    private BigDecimal maxNitrite;


    /** 幼体投喂频率（如：每日4-6次） */
    @Excel(name = "幼体投喂频率", readConverterExp = "如=：每日4-6次")
    private String feedingFreqJuvenile;

    /** 成体投喂频率 */
    @Excel(name = "成体投喂频率")
    private String feedingFreqAdult;

    /** 物种示意图URL */
    @Excel(name = "物种示意图URL")
    private String imageUrl;

    /** 简介 */
    @Excel(name = "简介")
    private String description;

    /** 创建人 */
    @Excel(name = "创建人")
    private String createdBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date createdAt;

    /** 修改人 */
    @Excel(name = "修改人")
    private String updatedBy;

    /** 修改时间 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "修改时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updatedAt;

    /** 状态：1：正常 / 0：已删除 */
    @Excel(name = "状态：1：正常 / 0：已删除")
    private Long status;

    // 提取日期部分（格式：yyyy-MM-dd）
    public String getCreateDate() {
        if (createdAt == null) {
            return ""; // 避免空指针异常
        }
        // 定义日期格式（仅年月日）
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        return sdf.format(createdAt); // 格式化后仅返回日期
    }
//    private String queryDate;

//    public void setId(Long id)
//    {
//        this.id = id;
//    }
//
//    public Long getId()
//    {
//        return id;
//    }
//
//    public void setSpeciesName(String speciesName)
//    {
//        this.speciesName = speciesName;
//    }
//
//    public String getSpeciesName()
//    {
//        return speciesName;
//    }
//
//    public void setBiologicalType(String biologicalType)
//    {
//        this.biologicalType = biologicalType;
//    }
//
//    public String getBiologicalType()
//    {
//        return biologicalType;
//    }
//
//    public void setScientificName(String scientificName)
//    {
//        this.scientificName = scientificName;
//    }
//
//    public String getScientificName()
//    {
//        return scientificName;
//    }
//
//    public void setMinTemp(BigDecimal minTemp)
//    {
//        this.minTemp = minTemp;
//    }
//
//    public BigDecimal getMinTemp()
//    {
//        return minTemp;
//    }
//
//    public void setMaxTemp(BigDecimal maxTemp)
//    {
//        this.maxTemp = maxTemp;
//    }
//
//
//    public BigDecimal getMaxTemp()
//    {
//        return maxTemp;
//    }
//
//    public void setMinOxygen(BigDecimal minOxygen)
//    {
//        this.minOxygen = minOxygen;
//    }
//
//    public BigDecimal getMinOxygen()
//    {
//        return minOxygen;
//    }
//
//    public void setMaxOxygen(BigDecimal maxOxygen)
//    {
//        this.maxOxygen = maxOxygen;
//    }
//
//    public BigDecimal getMaxOxygen()
//    {
//        return maxOxygen;
//    }
//
//    public void setMinAmmonia(BigDecimal minAmmonia)
//    {
//        this.minAmmonia = minAmmonia;
//    }
//
//    public BigDecimal getMinAmmonia()
//    {
//        return minAmmonia;
//    }
//
//    public void setMaxAmmonia(BigDecimal maxAmmonia)
//    {
//        this.maxAmmonia = maxAmmonia;
//    }
//
//    public BigDecimal getMaxAmmonia()
//    {
//        return maxAmmonia;
//    }
//
//    public void setFeedingFreqJuvenile(String feedingFreqJuvenile)
//    {
//        this.feedingFreqJuvenile = feedingFreqJuvenile;
//    }
//
//    public String getFeedingFreqJuvenile()
//    {
//        return feedingFreqJuvenile;
//    }
//
//    public void setFeedingFreqAdult(String feedingFreqAdult)
//    {
//        this.feedingFreqAdult = feedingFreqAdult;
//    }
//
//    public String getFeedingFreqAdult()
//    {
//        return feedingFreqAdult;
//    }
//
//    public void setImageUrl(String imageUrl)
//    {
//        this.imageUrl = imageUrl;
//    }
//
//    public String getImageUrl()
//    {
//        return imageUrl;
//    }
//
//    public void setDescription(String description)
//    {
//        this.description = description;
//    }
//
//    public String getDescription()
//    {
//        return description;
//    }
//
//    public void setCreatedBy(String createdBy)
//    {
//        this.createdBy = createdBy;
//    }
//
//    public String getCreatedBy()
//    {
//        return createdBy;
//    }
//
//    public void setCreatedAt(Date createdAt)
//    {
//        this.createdAt = createdAt;
//    }
//
//    public Date getCreatedAt()
//    {
//        return createdAt;
//    }
//
//    public void setUpdatedBy(String updatedBy)
//    {
//        this.updatedBy = updatedBy;
//    }
//
//    public String getUpdatedBy()
//    {
//        return updatedBy;
//    }
//
//    public void setUpdatedAt(Date updatedAt)
//    {
//        this.updatedAt = updatedAt;
//    }
//
//    public Date getUpdatedAt()
//    {
//        return updatedAt;
//    }
//
//    public void setStatus(Long status)
//    {
//        this.status = status;
//    }
//
//    public Long getStatus()
//    {
//        return status;
//    }
//
//    @Override
//    public String toString() {
//        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
//            .append("id", getId())
//            .append("speciesName", getSpeciesName())
//            .append("biologicalType", getBiologicalType())
//            .append("scientificName", getScientificName())
//            .append("minTemp", getMinTemp())
//            .append("maxTemp", getMaxTemp())
//            .append("minOxygen", getMinOxygen())
//            .append("maxOxygen", getMaxOxygen())
//            .append("minAmmonia", getMinAmmonia())
//            .append("maxAmmonia", getMaxAmmonia())
//            .append("feedingFreqJuvenile", getFeedingFreqJuvenile())
//            .append("feedingFreqAdult", getFeedingFreqAdult())
//            .append("imageUrl", getImageUrl())
//            .append("description", getDescription())
//            .append("createdBy", getCreatedBy())
//            .append("createdAt", getCreatedAt())
//            .append("updatedBy", getUpdatedBy())
//            .append("updatedAt", getUpdatedAt())
//            .append("status", getStatus())
//            .toString();
//    }
}
